let a:object //a能存储的类型是【非原始类型】
let b:Object //b能存储的类型是可以调用到Object方法的类型

a={}
a={name:"HI"}
a=function(){}
a=new String("123")
class Person{}
a=new Person()

// b=null //b不能存null，因为调用不了.toString()
// b=undefined //b不能存undefined，因为调用不了.toString()

let person:{
    name:string;
    age?:number;
    [key:string]:any //代表之后所有的key值为string，value值类型为any
}

person={name:"tom",age:18,gender:'男',city:'北京'}

let count:(a:number,b:number)=>number

// count=function(a:number,b:number):number{
//     return a+b;
// }

// 简写形式：
count=function(a,b){
    return a+b;
}

// 元组类型声明
let tuple:[string,number]
// 具体元组值
tuple=['h',100] 

let tuple3:[number,...string[]] //代表后面为可变string类型
tuple3=[100,"h","b"]